package ar.edu.caece.compiler.grammars.sample2.tokens;



public class PlusToken extends SampleToken {

	public static interface PlusTokenVisitor extends TokenVisitorInterface {
		public SampleGrammarSymbol plusCase(PlusToken llamador, SampleGrammarSymbol param) throws Exception;
	}
	
	public static abstract class PlusChainVisitor implements PlusTokenVisitor {
		private TokenVisitorInterface siguiente;
		protected PlusChainVisitor(TokenVisitorInterface siguienteVisitor) {
			siguiente = siguienteVisitor;
		}
		
		public SampleGrammarSymbol defaultCase(SampleToken llamador, SampleGrammarSymbol param) throws Exception {
			return llamador.execute(siguiente, param);
		}
	}
	
	public static abstract class PlusDefaultVisitor implements PlusTokenVisitor {
		public abstract SampleGrammarSymbol defaultCase(SampleToken llamador, SampleGrammarSymbol param);
	}
	
	public PlusToken(String string) {
		setLexema(string);
	}
	@Override
	public SampleGrammarSymbol execute(TokenVisitorInterface visitor, SampleGrammarSymbol param) throws Exception {
		System.out.println("Entrando al visitor de plus con " + visitor.getClass());
		return (visitor instanceof PlusTokenVisitor)? 
			   ((PlusTokenVisitor) visitor).plusCase(this, param):
			   visitor.defaultCase(this, param);
		
	}
	@Override
	public String getRepresentation() {
		return "" + getLexema();
	}


}
